package cn.edu.ustc.xrovers.dao;

import cn.edu.ustc.xrovers.model.BalanceSheet;
import cn.edu.ustc.xrovers.model.CashFlowStatement;
import cn.edu.ustc.xrovers.model.Company;
import cn.edu.ustc.xrovers.model.IncomeStatement;
import cn.edu.ustc.xrovers.model.Loan;
import cn.edu.ustc.xrovers.model.Manager;
import cn.edu.ustc.xrovers.model.NonFinancialInformation;

/**
 * 处理企业信息的DAO接口
 * @author paddy
 *
 */
public interface CompanyInfoDao {

	/**
	 * 保存企业基本信息
	 * @param company Company持久化对象
	 * @param role 企业所属的角色类型
	 * @return 保存成功返回true，否则返回false
	 */
	public boolean saveBaseInfo(Company company,final String role);
	
	/**
	 * 保存企业财务信息
	 * @param bs BalanceSheet资产负债持久化对象
	 * @param cfs CashFlowStatement现金流量持久化对象
	 * @param is IncomeStatement利润持久化对象
	 * @return 保存成功返回true，否则返回false
	 */
	public boolean saveFinInfo(BalanceSheet bs, CashFlowStatement cfs, IncomeStatement is, Company company);
	
	/**
	 * 保存企业非财务信息
	 * @param nfi NonFinancialInformation持久化类
	 * @param company Company持久化类
	 * @return 保存成功返回true，否则返回false
	 */
	public boolean saveNonFinInfo(NonFinancialInformation nfi, Company company);
	
	/**
	 * 保存贷款基本信息
	 * 金额，担保方式，日期
	 * @param loan Loan实体类对象，贷款基本信息
	 * @param company Company实体类对象，贷款企业的基本信息
	 * @param manager Manager实体类对象，经理相关信息
	 * @return 保存成功返回true，否则返回false
	 */
	public boolean saveLoanInfo(Loan loan, String guaWay, Company company, Manager manager);
	
	/**
	 * 根据贷款编号查询相应报表
	 * @param reportname 报表名称
	 * @param loanId 贷款编号
	 * @return 代表报表信息的实体类对象
	 */
	public Object findReportInfoByLoanId(final String reportname, final String loanId);
	
	/**
	 * 根据贷款编号查询贷款信息
	 * @param loanId 贷款编号
	 * @return Loan实体类对象
	 */
	public Object findLoanInfoByLoanId(final String loanId);
	
	/**
	 * 更新实体类通用方法
	 * @param entity 实体类对象
	 */
	public void updateInfo(Object entity);
}
